home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK2.toast / Development Kits (Disc 2) / QuickTime™ VR 2.0 SDK / Documentation + Extras / Updated Interfaces / QuickDraw 3D 1.5 Interfaces / Interfaces / QD3DIO.h < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-22  |  25.6 KB  |  882 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                              **
  3.  **     Module:        QD3DIO.h                                                 **                    
  4.  **                                                                              **
  5.  **                                                                              **
  6.  **     Purpose:    QuickDraw 3D IO API                                         **        
  7.  **                                                                              **
  8.  **                                                                              **
  9.  **                                                                              **
  10.  **     Copyright (C) 1992-1996 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                              **
  12.  **                                                                              **
  13.  *****************************************************************************/
  14. #ifndef QD3DIO_h
  15. #define QD3DIO_h
  16.  
  17. #if defined(PRAGMA_ONCE) && PRAGMA_ONCE
  18.     #pragma once
  19. #endif  /*  PRAGMA_ONCE  */
  20.  
  21. #include "QD3DDrawContext.h"
  22. #include "QD3DView.h"
  23.  
  24. #if defined(THINK_C) || defined(__SC__)
  25.     #pragma options(!pack_enums, !align_arrays)
  26.     #pragma SC options align=power
  27. #elif defined(__MWERKS__)
  28.     #pragma enumsalwaysint on
  29.     #pragma align_array_members off
  30.     #pragma options align=native
  31. #elif defined(__PPCC__)
  32.     #pragma options align=power
  33. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  34.     #pragma options enum=int
  35. #endif
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif  /* __cplusplus */
  40.  
  41. /******************************************************************************
  42.  **                                                                              **
  43.  **                                    Basic Types                                 **                                                
  44.  **                                                                              **
  45.  *****************************************************************************/
  46.  
  47. typedef unsigned char    TQ3Uns8;    /* 1 byte unsigned integer                 */ 
  48. typedef signed   char    TQ3Int8;    /* 1 byte signed integer                 */ 
  49. typedef unsigned short    TQ3Uns16;    /* 2 byte unsigned integer                 */ 
  50. typedef signed   short    TQ3Int16;    /* 2 byte signed integer                 */ 
  51. typedef unsigned long    TQ3Uns32;    /* 4 byte unsigned integer                 */
  52. typedef signed   long    TQ3Int32;    /* 4 byte signed integer                 */
  53.  
  54. typedef struct TQ3Uns64 {
  55. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  56.     unsigned long    hi;
  57.     unsigned long     lo;
  58. #else
  59.     unsigned long     lo;
  60.     unsigned long    hi;
  61. #endif /* OS_MACINTOSH */
  62. } TQ3Uns64;                            /* 8 byte unsigned integer                 */
  63.  
  64. typedef struct TQ3Int64 { 
  65. #if defined(OS_MACINTOSH) && OS_MACINTOSH
  66.     signed long        hi; 
  67.     unsigned long    lo; 
  68. #else
  69.     unsigned long    lo; 
  70.     signed long        hi; 
  71. #endif /* OS_MACINTOSH */
  72. } TQ3Int64;                            /* 8 byte signed integer                 */
  73.  
  74. typedef float            TQ3Float32;    /* 4 byte floating point number             */
  75. typedef double            TQ3Float64;    /* 8 byte floating point number             */
  76.  
  77. typedef TQ3Uns32        TQ3Size;
  78.  
  79. /******************************************************************************
  80.  **                                                                              **
  81.  **                                    File Types                                 **
  82.  **                                                                              **
  83.  *****************************************************************************/
  84.  
  85. typedef enum TQ3FileModeMasks {
  86.     kQ3FileModeNormal        = 0,
  87.     kQ3FileModeStream        = 1 << 0,
  88.     kQ3FileModeDatabase        = 1 << 1,
  89.     kQ3FileModeText            = 1 << 2
  90. } TQ3FileModeMasks;
  91.  
  92. typedef unsigned long TQ3FileMode;
  93.  
  94. /******************************************************************************
  95.  **                                                                              **
  96.  **                                    Method Types                             **
  97.  **                                                                              **
  98.  *****************************************************************************/
  99.  
  100. /*
  101.  *    IO Methods
  102.  *
  103.  *    The IO system treats all objects as groups of typed information.
  104.  *    When you register your element or attribute, the "elementType" is the 
  105.  *    binary type of your object, the "elementName" the ascii type.
  106.  *    
  107.  *    All objects in the metafile are made up of a "root" or parent object which
  108.  *    defines the instantiated object type. You may define the format of your 
  109.  *    data any way you wish as long as you use the primitives types above and the
  110.  *    routines below.
  111.  *
  112.  *    Root Objects are often appended with additional child objects, called 
  113.  *    subobjects. You may append your object with other QuickDraw 3D objects.
  114.  *    
  115.  *    Writing is straightforward: an object traverses itself any other objects 
  116.  *    that make it up, then writes its own data. Writing uses two methods: 
  117.  *    TQ3XObjectTraverseMethod and TQ3XObjectWriteMethod.
  118.  *
  119.  *    The TQ3XObjectTraverseMethod method should:
  120.  *    + First, Determine if the data should be written 
  121.  *        - if you don't want to write out your object after examining your
  122.  *            data, return kQ3Success in your Traverse method without calling
  123.  *            any other submit calls.
  124.  *     + Next, calculate the size of your object on disk
  125.  *     + Gather whatever state from the view you need to preserve
  126.  *         - you may access the view state NOW, as the state of the
  127.  *             view duing your TQ3XObjectWriteMethod will not be valid. You may
  128.  *             pass a temporary buffer to your write method.
  129.  *     + Submit your view write data using Q3View_SubmitWriteData
  130.  *         - note that you MUST call this before any other "_Submit" call.
  131.  *         - you may pass in a "deleteMethod" for your data. This method
  132.  *             will be called whether or not your write method succeeds or fails.
  133.  *     + Submit your subobjects to the view
  134.  *     
  135.  *     The TQ3XObjectWriteMethod method should:
  136.  *     + Write your data format to the file using the primitives routines below.
  137.  *         - If you passed a "deleteMethod" in your Q3View_SubmitWriteData, that
  138.  *             method will be called upon exit of your write method.
  139.  *
  140.  *    Reading is less straightforward because your root object and
  141.  *    any subobjects must be read inside of your TQ3XObjectReadDataMethod. There 
  142.  *    is an implicit state contained in the file while reading, which you must 
  143.  *    be aware of. When you first enter the read method, you must physically 
  144.  *    read in your data format using the primitives routines until
  145.  *    
  146.  *    Q3File_IsEndOfData(file) == kQ3True
  147.  *    
  148.  *    Generally, your data format should be self-descriptive such that you do not
  149.  *    need to call Q3File_IsEndOfData to determine if you are done reading. 
  150.  *    However, this call is useful for determining zero-sized object or 
  151.  *    determining the end of an object's data.
  152.  *    
  153.  *    Once you have read in all the data, you may collect subobjects. A metafile
  154.  *    object ONLY has subobjects if it is in a container. The call
  155.  *    
  156.  *    Q3File_IsEndOfContainer(file)
  157.  *    
  158.  *    returns kQ3False if subobjects exist, and kQ3True if subobjects do not 
  159.  *    exist.
  160.  *    
  161.  *    At this point, you may use
  162.  *    
  163.  *    Q3File_GetNextObjectType
  164.  *    Q3File_IsNextObjectOfType
  165.  *    Q3File_ReadObject
  166.  *    Q3File_SkipObject
  167.  *    
  168.  *    to iterate through the subobjects until Q3File_IsEndOfContainer(file) 
  169.  *    is kQ3True.
  170.  * 
  171.  */
  172.  
  173. #if defined(QD3D_OBSOLETE) && QD3D_OBSOLETE
  174.  
  175. /*
  176.  *    TQ3ObjectTraverseMethod
  177.  *
  178.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  179.  *    object. Sorry, custom objects will be available in the next major revision.
  180.  *
  181.  *    The "data" is a pointer to your internal element data.
  182.  *
  183.  *    The view is the current traversal view.
  184.  */
  185. typedef TQ3Status (*TQ3ObjectTraverseMethod)(
  186.     TQ3Object            object,
  187.     void                *data,
  188.     TQ3ViewObject        view);
  189.  
  190. typedef TQ3Status (*TQ3ObjectWriteMethod)(
  191.     const void            *object,
  192.     TQ3FileObject        file);
  193.  
  194. /*
  195.  *  Use Q3XView_SubmitWriteData instead...
  196.  */
  197. typedef void (QD3D_CALLBACK *TQ3DataDeleteMethod)(
  198.     void                *data);
  199.  
  200. QD3D_EXPORT TQ3Status QD3D_CALL Q3View_SubmitWriteData(
  201.     TQ3ViewObject        view,
  202.     TQ3Size                size,    
  203.     void                *data,
  204.     TQ3DataDeleteMethod    deleteData);
  205.  
  206. /*
  207.  *    TQ3ObjectReadDataMethod
  208.  *
  209.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  210.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  211.  *
  212.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  213.  */
  214. typedef TQ3Status (*TQ3ObjectReadDataMethod)(
  215.     TQ3Object            parentObject,
  216.     TQ3FileObject        file);
  217.  
  218. #endif  /*  QD3D_OBSOLETE  */
  219.  
  220. /*
  221.  * IO Methods
  222.  */
  223. #define kQ3XMethodTypeObjectFileVersion        Q3_METHOD_TYPE('v','e','r','s') /* version */
  224. #define kQ3XMethodTypeObjectTraverse        Q3_METHOD_TYPE('t','r','v','s') /* byte count */
  225. #define kQ3XMethodTypeObjectTraverseData    Q3_METHOD_TYPE('t','r','v','d') /* byte count */
  226. #define kQ3XMethodTypeObjectWrite            Q3_METHOD_TYPE('w','r','i','t') /* Dump info to file */
  227. #define kQ3XMethodTypeObjectReadData        Q3_METHOD_TYPE('r','d','d','t') /* Read info from file into buffer or, attach read data to parent */ 
  228. #define kQ3XMethodTypeObjectRead            Q3_METHOD_TYPE('r','e','a','d')
  229. #define kQ3XMethodTypeObjectAttach            Q3_METHOD_TYPE('a','t','t','c')
  230.  
  231. /*
  232.  *    TQ3XObjectTraverseMethod
  233.  *
  234.  *    For "elements" (meaning "attributes, too), you will be passed NULL for 
  235.  *    object. Sorry, custom objects will be available in the next major revision.
  236.  *
  237.  *    The "data" is a pointer to your internal element data.
  238.  *
  239.  *    The view is the current traversal view.
  240.  */
  241. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectTraverseMethod)(
  242.     TQ3Object            object,
  243.     void                *data,
  244.     TQ3ViewObject        view);
  245.  
  246. /*
  247.  *  TQ3XObjectTraverseDataMethod
  248.  */
  249. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectTraverseDataMethod)(
  250.     TQ3Object            object,
  251.     void                *data,
  252.     TQ3ViewObject        view);
  253.  
  254. /*
  255.  *  TQ3XObjectWriteMethod
  256.  */
  257. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectWriteMethod)(
  258.     const void            *object,
  259.     TQ3FileObject        file);
  260.  
  261. /*
  262.  *  Custom object writing 
  263.  */
  264. typedef void (QD3D_CALLBACK *TQ3XDataDeleteMethod)(
  265.     void                    *data);
  266.  
  267. QD3D_EXPORT TQ3Status QD3D_CALL Q3XView_SubmitWriteData(
  268.     TQ3ViewObject            view,
  269.     TQ3Size                    size,    
  270.     void                    *data,
  271.     TQ3XDataDeleteMethod    deleteData);
  272.  
  273. QD3D_EXPORT TQ3Status QD3D_CALL Q3XView_SubmitSubObjectData(
  274.     TQ3ViewObject            view,
  275.     TQ3XObjectClass            objectClass,
  276.     unsigned long            size,
  277.     void                    *data,
  278.     TQ3XDataDeleteMethod    deleteData);
  279.  
  280. /*
  281.  *  TQ3XObjectReadMethod
  282.  */
  283. typedef TQ3Object (QD3D_CALLBACK *TQ3XObjectReadMethod)(
  284.     TQ3FileObject        file);
  285.  
  286. /*
  287.  *    TQ3XObjectReadDataMethod
  288.  *
  289.  *  For "elements" (meaning "attributes", too), you must allocate stack space 
  290.  *    and call Q3Set_Add on "parentObject", which is an TQ3SetObject.
  291.  *
  292.  *    Otherwise, parentObject is whatever object your element is a subobject of...
  293.  */
  294. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectReadDataMethod)(
  295.     TQ3Object            parentObject,
  296.     TQ3FileObject        file);
  297.  
  298. /*
  299.  *  TQ3XObjectAttachMethod
  300.  */
  301. typedef TQ3Status (QD3D_CALLBACK *TQ3XObjectAttachMethod)(
  302.     TQ3Object            childObject,
  303.     TQ3Object            parentObject);
  304.  
  305.  
  306. /******************************************************************************
  307.  **                                                                              **
  308.  **                                Versioning                                     **
  309.  **                                                                              **
  310.  *****************************************************************************/
  311.  
  312. #define Q3FileVersion(majorVersion, minorVersion)                    \
  313.     (TQ3FileVersion) ((((TQ3Uns32) majorVersion & 0xFFFF) << 16) |     \
  314.                        ((TQ3Uns32) minorVersion & 0xFFFF))
  315.  
  316. typedef unsigned long            TQ3FileVersion;
  317. #define kQ3FileVersionCurrent    Q3FileVersion(1, 5)
  318.  
  319.  
  320. /******************************************************************************
  321.  **                                                                              **
  322.  **                                File Routines                                 **
  323.  **                                                                              **
  324.  *****************************************************************************/
  325. /*
  326.  *  Creation and accessors
  327.  */
  328. QD3D_EXPORT TQ3FileObject QD3D_CALL Q3File_New(
  329.     void);
  330.  
  331. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_GetStorage(
  332.     TQ3FileObject        file,
  333.     TQ3StorageObject    *storage);
  334.  
  335. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_SetStorage(
  336.     TQ3FileObject        file,
  337.     TQ3StorageObject    storage);
  338.  
  339. /*
  340.  *  Opening, and accessing "open" state, closing/cancelling
  341.  */
  342. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_OpenRead(
  343.     TQ3FileObject        file,
  344.     TQ3FileMode            *mode);
  345.  
  346. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_OpenWrite(
  347.     TQ3FileObject        file,
  348.     TQ3FileMode            mode);
  349.  
  350. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_IsOpen(
  351.     TQ3FileObject        file,
  352.     TQ3Boolean            *isOpen);
  353.  
  354. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_GetMode(
  355.     TQ3FileObject        file,
  356.     TQ3FileMode            *mode);
  357.  
  358. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_GetVersion(
  359.     TQ3FileObject        file,
  360.     TQ3FileVersion        *version);
  361.  
  362. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_Close(
  363.     TQ3FileObject        file);
  364.  
  365. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_Cancel(
  366.     TQ3FileObject        file);
  367.  
  368. /*
  369.  *  Writing (Application)
  370.  */
  371. QD3D_EXPORT TQ3Status QD3D_CALL Q3View_StartWriting(
  372.     TQ3ViewObject         view,
  373.     TQ3FileObject        file);
  374.  
  375. QD3D_EXPORT TQ3ViewStatus QD3D_CALL Q3View_EndWriting(
  376.     TQ3ViewObject         view);
  377.  
  378. /*
  379.  *  Reading (Application)
  380.  */
  381. QD3D_EXPORT TQ3ObjectType QD3D_CALL Q3File_GetNextObjectType(
  382.     TQ3FileObject        file);
  383.  
  384. QD3D_EXPORT TQ3Boolean QD3D_CALL Q3File_IsNextObjectOfType(
  385.     TQ3FileObject        file,
  386.     TQ3ObjectType        ofType);
  387.  
  388. QD3D_EXPORT TQ3Object QD3D_CALL Q3File_ReadObject(
  389.     TQ3FileObject        file);
  390.  
  391. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_SkipObject(
  392.     TQ3FileObject        file);
  393.  
  394. QD3D_EXPORT TQ3Boolean QD3D_CALL Q3File_IsEndOfData(
  395.     TQ3FileObject        file);
  396.  
  397. QD3D_EXPORT TQ3Boolean QD3D_CALL Q3File_IsEndOfContainer(
  398.     TQ3FileObject        file,
  399.     TQ3Object            rootObject);
  400.  
  401. QD3D_EXPORT TQ3Boolean QD3D_CALL Q3File_IsEndOfFile(
  402.     TQ3FileObject        file);
  403.  
  404. /*    
  405.  *  External file references
  406.  */    
  407. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_MarkAsExternalReference(
  408.     TQ3FileObject        file,
  409.     TQ3SharedObject        sharedObject);
  410.  
  411. QD3D_EXPORT TQ3GroupObject QD3D_CALL Q3File_GetExternalReferences(
  412.     TQ3FileObject            file);
  413.  
  414. /*    
  415.  *  Tracking editing in read-in objects with custom elements
  416.  */    
  417. QD3D_EXPORT TQ3Status QD3D_CALL Q3Shared_ClearEditTracking(
  418.     TQ3SharedObject        sharedObject);
  419.     
  420. QD3D_EXPORT unsigned long QD3D_CALL Q3Shared_GetEditTrackingState(
  421.     TQ3SharedObject        sharedObject);
  422.  
  423. /*    
  424.  *  Reading objects inside a group one-by-one
  425.  */    
  426. typedef enum TQ3FileReadGroupStates{
  427.     kQ3FileReadWholeGroup        = 0,
  428.     kQ3FileReadObjectsInGroup    = 1 << 0,
  429.     kQ3FileCurrentlyInsideGroup    = 1 << 1
  430. } TQ3FileReadGroupStates;
  431.  
  432. typedef unsigned long TQ3FileReadGroupState;
  433.  
  434. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_SetReadInGroup(
  435.     TQ3FileObject            file,
  436.     TQ3FileReadGroupState    readGroupState);
  437.     
  438. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_GetReadInGroup(
  439.     TQ3FileObject            file,
  440.     TQ3FileReadGroupState    *readGroupState);
  441.  
  442. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  443.  
  444. #if 0
  445. /* If'ed out so linker doesn't complain */
  446.  
  447. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_AddIncludeFilter(
  448.     TQ3FileObject        file,
  449.     TQ3ObjectType        includeType);
  450.  
  451. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_AddExcludeFilter(
  452.     TQ3FileObject        file,
  453.     TQ3ObjectType        excludeType);
  454.  
  455. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_ClearFilters(
  456.     TQ3FileObject        file);
  457.  
  458. #endif  /*  0  */
  459.  
  460. #endif  /*  ESCHER_VER_FUTURE  */
  461.  
  462. /*
  463.  *  Idling
  464.  */
  465. typedef TQ3Status (QD3D_CALLBACK *TQ3FileIdleMethod)(
  466.     TQ3FileObject        file,
  467.     const void            *idlerData);
  468.  
  469. QD3D_EXPORT TQ3Status QD3D_CALL Q3File_SetIdleMethod(
  470.     TQ3FileObject        file,
  471.     TQ3FileIdleMethod    idle,
  472.     const void            *idleData);
  473.     
  474.  
  475. /******************************************************************************
  476.  **                                                                              **
  477.  **                                Primitives Routines                             **
  478.  **                                                                              **
  479.  *****************************************************************************/
  480.  
  481. QD3D_EXPORT TQ3Status QD3D_CALL Q3NewLine_Write(
  482.     TQ3FileObject        file);
  483.  
  484. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns8_Read(
  485.     TQ3Uns8                *data,
  486.     TQ3FileObject        file);
  487.  
  488. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns8_Write(
  489.     const TQ3Uns8        data,
  490.     TQ3FileObject        file);
  491.  
  492. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns16_Read(
  493.     TQ3Uns16            *data,
  494.     TQ3FileObject        file);
  495.  
  496. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns16_Write(
  497.     const TQ3Uns16        data,
  498.     TQ3FileObject        file);
  499.  
  500. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns32_Read(
  501.     TQ3Uns32            *data,
  502.     TQ3FileObject        file);
  503.         
  504. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns32_Write(
  505.     const TQ3Uns32        data,
  506.     TQ3FileObject        file);
  507.  
  508. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int32_Read(
  509.     TQ3Int32            *data,
  510.     TQ3FileObject        file);
  511.             
  512. QD3D_EXPORT TQ3Status QD3D_CALL Q3Int32_Write(
  513.     const TQ3Int32        data,
  514.     TQ3FileObject        file);
  515.             
  516. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns64_Read(
  517.     TQ3Uns64            *data,
  518.     TQ3FileObject        file);
  519.         
  520. QD3D_EXPORT TQ3Status QD3D_CALL Q3Uns64_Write(
  521.     const TQ3Uns64        data,
  522.     TQ3FileObject        file);
  523.  
  524. QD3D_EXPORT TQ3Status QD3D_CALL Q3Float32_Read(
  525.     TQ3Float32            *data,
  526.     TQ3FileObject        file);
  527.  
  528. QD3D_EXPORT TQ3Status QD3D_CALL Q3Float32_Write(
  529.     const TQ3Float32    data,
  530.     TQ3FileObject        file);
  531.  
  532. QD3D_EXPORT TQ3Status QD3D_CALL Q3Float64_Read(
  533.     TQ3Float64            *data,
  534.     TQ3FileObject        file);
  535.  
  536. QD3D_EXPORT TQ3Status QD3D_CALL Q3Float64_Write(
  537.     const TQ3Float64    data,
  538.     TQ3FileObject        file);
  539.  
  540. QD3D_EXPORT TQ3Size QD3D_CALL Q3Size_Pad(
  541.     TQ3Size                size);
  542.  
  543. /*
  544.  *  Pass a pointer to a buffer of kQ3StringMaximumLength bytes
  545.  */
  546. QD3D_EXPORT TQ3Status QD3D_CALL Q3String_Read(
  547.     char                *data,
  548.     unsigned long        *length,
  549.     TQ3FileObject        file);
  550.  
  551. QD3D_EXPORT TQ3Status QD3D_CALL Q3String_Write(
  552.     const char            *data,
  553.     TQ3FileObject        file);
  554.  
  555. /* 
  556.  *  This call will read Q3Size_Pad(size) bytes,
  557.  *    but only place size bytes into data.
  558.  */
  559. QD3D_EXPORT TQ3Status QD3D_CALL Q3RawData_Read(
  560.     unsigned char        *data,
  561.     unsigned long        size,
  562.     TQ3FileObject        file);
  563.  
  564. /* 
  565.  *  This call will write Q3Size_Pad(size) bytes,
  566.  *    adding 0's to pad to the nearest 4 byte boundary.
  567.  */
  568. QD3D_EXPORT TQ3Status QD3D_CALL Q3RawData_Write(
  569.     const unsigned char    *data,
  570.     unsigned long        size,
  571.     TQ3FileObject        file);
  572.  
  573. /******************************************************************************
  574.  **                                                                              **
  575.  **                        Convenient Primitives Routines                         **
  576.  **                                                                              **
  577.  *****************************************************************************/
  578.  
  579. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point2D_Read(
  580.     TQ3Point2D                    *point2D,
  581.     TQ3FileObject                file);
  582.  
  583. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point2D_Write(
  584.     const TQ3Point2D            *point2D,
  585.     TQ3FileObject                file);
  586.  
  587. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point3D_Read(
  588.     TQ3Point3D                    *point3D,
  589.     TQ3FileObject                file);
  590.  
  591. QD3D_EXPORT TQ3Status QD3D_CALL Q3Point3D_Write(
  592.     const TQ3Point3D            *point3D,
  593.     TQ3FileObject                file);
  594.     
  595. QD3D_EXPORT TQ3Status QD3D_CALL Q3RationalPoint3D_Read(
  596.     TQ3RationalPoint3D            *point3D,
  597.     TQ3FileObject                file);
  598.  
  599. QD3D_EXPORT TQ3Status QD3D_CALL Q3RationalPoint3D_Write(
  600.     const TQ3RationalPoint3D    *point3D,
  601.     TQ3FileObject                file);
  602.  
  603. QD3D_EXPORT TQ3Status QD3D_CALL Q3RationalPoint4D_Read(
  604.     TQ3RationalPoint4D            *point4D,
  605.     TQ3FileObject                file);
  606.  
  607. QD3D_EXPORT TQ3Status QD3D_CALL Q3RationalPoint4D_Write(
  608.     const TQ3RationalPoint4D    *point4D,
  609.     TQ3FileObject                file);
  610.  
  611. QD3D_EXPORT TQ3Status QD3D_CALL Q3Vector2D_Read(
  612.     TQ3Vector2D                    *vector2D,
  613.     TQ3FileObject                file);
  614.  
  615. QD3D_EXPORT TQ3Status QD3D_CALL Q3Vector2D_Write(
  616.     const TQ3Vector2D            *vector2D,
  617.     TQ3FileObject                file);
  618.  
  619. QD3D_EXPORT TQ3Status QD3D_CALL Q3Vector3D_Read(
  620.     TQ3Vector3D                    *vector3D,
  621.     TQ3FileObject                file);
  622.  
  623. QD3D_EXPORT TQ3Status QD3D_CALL Q3Vector3D_Write(
  624.     const TQ3Vector3D            *vector3D,
  625.     TQ3FileObject                file);
  626.  
  627. QD3D_EXPORT TQ3Status QD3D_CALL Q3Matrix4x4_Read(
  628.     TQ3Matrix4x4                *matrix4x4,
  629.     TQ3FileObject                file);
  630.  
  631. QD3D_EXPORT TQ3Status QD3D_CALL Q3Matrix4x4_Write(
  632.     const TQ3Matrix4x4            *matrix4x4,
  633.     TQ3FileObject                file);
  634.  
  635. QD3D_EXPORT TQ3Status QD3D_CALL Q3Tangent2D_Read(
  636.     TQ3Tangent2D                *tangent2D,
  637.     TQ3FileObject                file);
  638.  
  639. QD3D_EXPORT TQ3Status QD3D_CALL Q3Tangent2D_Write(
  640.     const TQ3Tangent2D            *tangent2D,
  641.     TQ3FileObject                file);
  642.  
  643. QD3D_EXPORT TQ3Status QD3D_CALL Q3Tangent3D_Read(
  644.     TQ3Tangent3D                *tangent3D,
  645.     TQ3FileObject                file);
  646.  
  647. QD3D_EXPORT TQ3Status QD3D_CALL Q3Tangent3D_Write(
  648.     const TQ3Tangent3D            *tangent3D,
  649.     TQ3FileObject                file);
  650.  
  651. /*    
  652.  *  This call affects only text Files - it is a no-op in binary files 
  653.  */
  654. QD3D_EXPORT TQ3Status QD3D_CALL Q3Comment_Write(
  655.     char                        *comment,
  656.     TQ3FileObject                file);
  657.  
  658. /******************************************************************************
  659.  **                                                                              **
  660.  **                                Unknown Object                                 **
  661.  **                                                                              **
  662.  **        Unknown objects are generated when reading files which contain         **
  663.  **        custom data which has not been registered in the current             **
  664.  **        instantiation of QuickDraw 3D.                                         **
  665.  **                                                                              **
  666.  *****************************************************************************/
  667.  
  668. QD3D_EXPORT TQ3ObjectType QD3D_CALL Q3Unknown_GetType(
  669.     TQ3UnknownObject        unknownObject);
  670.  
  671. QD3D_EXPORT TQ3Status QD3D_CALL Q3Unknown_GetDirtyState(
  672.     TQ3UnknownObject        unknownObject,
  673.     TQ3Boolean                *isDirty);
  674.  
  675. QD3D_EXPORT TQ3Status QD3D_CALL Q3Unknown_SetDirtyState(
  676.     TQ3UnknownObject        unknownObject,
  677.     TQ3Boolean                isDirty);
  678.  
  679.  
  680. /******************************************************************************
  681.  **                                                                              **
  682.  **                            Unknown Text Routines                             **
  683.  **                                                                              **
  684.  *****************************************************************************/
  685.  
  686. typedef struct TQ3UnknownTextData {
  687.     char                    *objectName;    /* '\0' terminated */
  688.     char                    *contents;        /* '\0' terminated */
  689. } TQ3UnknownTextData;
  690.  
  691. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownText_GetData(
  692.     TQ3UnknownObject        unknownObject,
  693.     TQ3UnknownTextData        *unknownTextData);
  694.  
  695. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownText_EmptyData(
  696.     TQ3UnknownTextData        *unknownTextData);
  697.  
  698.  
  699. /******************************************************************************
  700.  **                                                                              **
  701.  **                            Unknown Binary Routines                             **
  702.  **                                                                              **
  703.  *****************************************************************************/
  704.  
  705. typedef struct TQ3UnknownBinaryData {
  706.     TQ3ObjectType            objectType;
  707.     unsigned long            size;
  708.     TQ3Endian                byteOrder;
  709.     char                    *contents;
  710. } TQ3UnknownBinaryData;
  711.  
  712. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownBinary_GetData(
  713.     TQ3UnknownObject        unknownObject,
  714.     TQ3UnknownBinaryData    *unknownBinaryData);
  715.  
  716. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownBinary_EmptyData(
  717.     TQ3UnknownBinaryData    *unknownBinaryData);
  718.  
  719. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownBinary_GetTypeString(
  720.     TQ3UnknownObject    unknownObject,
  721.     char                **typeString);
  722.     
  723. QD3D_EXPORT TQ3Status QD3D_CALL Q3UnknownBinary_EmptyTypeString(
  724.     char    **typeString);
  725.  
  726.  
  727. /******************************************************************************
  728.  **                                                                              **
  729.  **                            ViewHints routines                                 **
  730.  **                                                                              **
  731.  **        ViewHints are an object in a metafile to give you some hints on how     **
  732.  **        to render a scene.    You may create a view with any of the objects     **
  733.  **        retrieved from it, or you can just throw it away.                     **
  734.  **                                                                              **
  735.  **        To write a view hints to a file, create a view hints object from a     **
  736.  **        view and write the view hints.                                         **
  737.  **                                                                              **
  738.  *****************************************************************************/
  739.  
  740. QD3D_EXPORT TQ3ViewHintsObject QD3D_CALL Q3ViewHints_New(
  741.     TQ3ViewObject            view);
  742.  
  743. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetRenderer(
  744.     TQ3ViewHintsObject        viewHints,
  745.     TQ3RendererObject        renderer);
  746.  
  747. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetRenderer(
  748.     TQ3ViewHintsObject        viewHints,
  749.     TQ3RendererObject        *renderer);
  750.  
  751. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetCamera(
  752.     TQ3ViewHintsObject        viewHints,
  753.     TQ3CameraObject            camera);
  754.  
  755. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetCamera(
  756.     TQ3ViewHintsObject        viewHints,
  757.     TQ3CameraObject            *camera);
  758.  
  759. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetLightGroup(
  760.     TQ3ViewHintsObject        viewHints,
  761.     TQ3GroupObject            lightGroup);
  762.  
  763. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetLightGroup(
  764.     TQ3ViewHintsObject        viewHints,
  765.     TQ3GroupObject            *lightGroup);
  766.  
  767. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetAttributeSet(
  768.     TQ3ViewHintsObject        viewHints,
  769.     TQ3AttributeSet            attributeSet);
  770.  
  771. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetAttributeSet(
  772.     TQ3ViewHintsObject        viewHints,
  773.     TQ3AttributeSet            *attributeSet);
  774.  
  775. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetDimensionsState(
  776.     TQ3ViewHintsObject        viewHints,
  777.     TQ3Boolean                isValid);
  778.     
  779. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetDimensionsState(
  780.     TQ3ViewHintsObject        viewHints,
  781.     TQ3Boolean                *isValid);
  782.  
  783. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetDimensions(
  784.     TQ3ViewHintsObject        viewHints,
  785.     unsigned long            width,
  786.     unsigned long            height);
  787.  
  788. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetDimensions(
  789.     TQ3ViewHintsObject        viewHints,
  790.     unsigned long            *width,
  791.     unsigned long            *height);
  792.  
  793. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetMaskState(
  794.     TQ3ViewHintsObject        viewHints,
  795.     TQ3Boolean                isValid);
  796.  
  797. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetMaskState(
  798.     TQ3ViewHintsObject        viewHints,
  799.     TQ3Boolean                *isValid);
  800.  
  801. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetMask(    
  802.     TQ3ViewHintsObject        viewHints,
  803.     const TQ3Bitmap            *mask);
  804.  
  805. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetMask(    
  806.     TQ3ViewHintsObject        viewHints,
  807.     TQ3Bitmap                *mask);
  808.  
  809. /* 
  810.  *  Call Q3Bitmap_Empty when done with the mask    
  811.  */
  812.  
  813. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetClearImageMethod(
  814.     TQ3ViewHintsObject                viewHints,
  815.     TQ3DrawContextClearImageMethod    clearMethod);
  816.  
  817. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetClearImageMethod(
  818.     TQ3ViewHintsObject                viewHints,
  819.     TQ3DrawContextClearImageMethod    *clearMethod);
  820.  
  821. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetClearImageColor(
  822.     TQ3ViewHintsObject        viewHints,
  823.     const TQ3ColorARGB         *color);
  824.  
  825. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetClearImageColor(
  826.     TQ3ViewHintsObject        viewHints,
  827.     TQ3ColorARGB             *color);
  828.  
  829. #if defined(ESCHER_VER_FUTURE) && ESCHER_VER_FUTURE
  830.  
  831. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetBackgroundShader(
  832.     TQ3ViewHintsObject        viewHints,
  833.     TQ3ShaderObject            backgroundShader);
  834.  
  835. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetBackgroundShader(
  836.     TQ3ViewHintsObject        viewHints,
  837.     TQ3ShaderObject            *backgroundShader);
  838.  
  839. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetAtmosphericShader(
  840.     TQ3ViewHintsObject        viewHints,
  841.     TQ3ShaderObject            atmospheric);
  842.  
  843. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetAtmosphericShader(
  844.     TQ3ViewHintsObject        viewHints,
  845.     TQ3ShaderObject            *atmospheric);
  846.  
  847. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetGlobalTime(
  848.     TQ3ViewHintsObject        viewHints,
  849.     float                    time);
  850.     
  851. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetGlobalTime(
  852.     TQ3ViewHintsObject        viewHints,
  853.     float                    *time);
  854.  
  855. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_SetAnimationDuration(
  856.     TQ3ViewHintsObject        viewHints,
  857.     float                    duration);
  858.     
  859. QD3D_EXPORT TQ3Status QD3D_CALL Q3ViewHints_GetAnimationDuration(
  860.     TQ3ViewHintsObject        viewHints,
  861.     float                    *duration);
  862.  
  863. #endif    /*  ESCHER_VER_FUTURE  */
  864.  
  865. #ifdef __cplusplus
  866. }
  867. #endif    /* __cplusplus */
  868.  
  869. #if defined(THINK_C) || defined(__SC__)
  870.     #pragma SC options align=reset
  871. #elif defined(__MWERKS__)
  872.     #pragma enumsalwaysint reset
  873.     #pragma align_array_members reset
  874.     #pragma options align=reset
  875. #elif  defined(__PPCC__)
  876.     #pragma options align=reset
  877. #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
  878.     #pragma options enum=reset
  879. #endif
  880.  
  881. #endif /* QD3DIO_h */
  882.